#include "startuppage.h"
#include "model/datacenter.h"
#include "toast.h"
StartupPage::StartupPage(QDialog *parent)
    : QDialog{parent}
{
    // 启动一个模态对话框, 没有标题 | 不在任务栏中显示
    this->setFixedSize(1450, 860);
    this->setAttribute(Qt::WA_TranslucentBackground);
    this->setWindowFlags(Qt::WindowType::FramelessWindowHint | Qt::WindowType::Tool);

    QLabel* label = new QLabel(this);
    label->setPixmap(QPixmap(":/images/startupPage/biteshipin.png"));
    label->move(524,374);

    auto dataCenter = model::DataCenter::getInstance();

    // 临时用户登录成功 (用户第一次使用客户端 || 使用过但没有登陆/退出登录)
    connect(dataCenter, &model::DataCenter::loginTempUserDone, this, [=]{
        loginSuccess = true;
        mySelfInfoSuccess = true;
        dataCenter->buildTempUserInfo();
    });

    // session登录成功 (服务器保存了用户登录信息 || 服务器中的用户登录信息过期)
    connect(dataCenter, &model::DataCenter::loginSessionDone, this, [=](bool isTempUser){
        loginSuccess = true;
        if(isTempUser){
            dataCenter->buildTempUserInfo();
            mySelfInfoSuccess = true;
        }else{
            dataCenter->getMyselfInfoAsync();
        }
    });
    // session登录失败
    connect(dataCenter, &model::DataCenter::loginSessionFailed, this, [=](const QString& reason){
        loginSuccess = false;
        Toast::showMessage("session登录失败, "+reason);
    });

    connect(dataCenter, &model::DataCenter::getMyselfInfoDone, this, [=]{
        mySelfInfoSuccess = true;
    });
}

void StartupPage::startTimer()
{
    // 启动界面实现2s: 通过定时器实现, 定时器时间到发送信号
    timer = new QTimer(this);
    timer->setSingleShot(false);
    connect(timer, &QTimer::timeout, this, [=](){
        if(loginSuccess && mySelfInfoSuccess) {
            timer->stop();
            delete timer;
            this->close();
        }
    });
    timer->start(2000);

    // 如果sessionId为空, 说明用户是第一次使用VidHub, 此时以临时用户方式登录
    // 如果sessionId非空, 但是当前用户是临时用户, 此时以临时用户方式登录
    // 如果sessionId非空, 当前用户也是非临时用户, 此时使用session登录
    auto dataCenter = model::DataCenter::getInstance();
    QString sessionId = dataCenter->getSessionId();
    if(sessionId.isEmpty() || dataCenter->getMyselfInfo()->isTempUser()){
        // 临时登录
        dataCenter->loginTempUserAsync();
    }else{
        dataCenter->loginSessionAsync();
    }
}
